Problem array sortieren

piti66

Erfahrenes Mitglied
Hallo,

ich habe ein array mit Bildern die aus einem Ordner ausgelesen werden. Die haben eine feste Reihenfolge:

1,2,3,4,5,6

Jetzt brauche ich aber das Array ein wenig anders. Der Startpunkt soll sozusagen geändert werden.

Bsp: 4,5,6,1,2,3 oder 2,3,4,5,6,1

Man sieht die Reihenfolge bleibt aber gleich nur fängt es woanders an.
Weiß jemand wie ich dass am Besten machen kann?

mfg

Sebastian
 
Verstehe nicht so recht. Beim sortieren hast du verschiedene Möglichkeiten entweder es Zufällig sortieren so das die Keys und Inhalt gleich bleiben oder aber du sortierst nur den Inhalt nach belieben wobei die Keys die gleiche Sortierung beibehalten.

Fragt sich wie genau du das also meinst. Sollen lediglich die Bilder sortiert werden aber die Keys ihre Reihenfolge behalten oder sollen die Bilder mit ihren Keys getauscht werden?
 
Grüße,

du könntets das Ganze mit uksort machen, da müsstest du dir nur eine eigene Sortierfunktion schreiben...dürfte machbar sein (ich probier mich mal dran).
 
Alt:

1,2,3,4,5,6

Neu:

4,5,6,1,2,3 oder 2,3,4,5,6,1 etc.

Dass Array soll also einfach anders sortiert werden, sozusagen anders anfangen als bei 0 bzw. 1, aber alle Werte auch enthalten bleiben.
 
Stimmt Alex_T deine Idee ist goldrichtig :)
Ich denke das hilft dir weiter:
PHP:
	$fruits = array("0" => "Zitrone", "1" => "Orange", "2" => "Banane", "3" => "Apfel");
	print_r($fruits);
	function scmp( $a, $b ) {
     return rand(-1,1);
	}
	uasort($fruits, 'scmp');
	print_r($fruits);
 
Hallo,

danke macht aber auch nicht dass was ich will...die feste Reihenfolge bleibt nicht. Hab mir jetzt nen Gerüst gebaut, was genau dass macht was ich will:

srand((float)microtime() * 1000000);
$zufall=$dateien;
shuffle($zufall);
$neu_array[]=$zufall[0];
//echo $neu_array[0];
foreach($dateien as $key=>$value) {
if($value==$neu_array[0]) {
$bilder[]='<img x="0" y="0" src="'.$value.'" />';
$los=$key;
}
if(isset($los) && $key!=$los) {
$bilder[]='<img x="0" y="0" src="'.$value.'" />';
}
}
foreach($dateien as $key=>$value) {
if(!in_array('<img x="0" y="0" src="'.$value.'" />',$bilder)) {
$bild[]='<img x="0" y="0" src="'.$value.'" />';
}
}
if(is_array($bild)) {
$beide_arrays=array_merge($bilder, $bild);
}
else {
$beide_arrays=$bilder;
}
foreach($beide_arrays as $key=>$value) {
$bilds.=$value;
}
 
Also ich bins nochmal,

@Joe: jup das würde denke ich so funktionieren, nur das du die Funktion rand() nutzt, um die entsprechende Rückgabe zu erzeugen.

Ich hab piti66's Anliegen aber so verstanden, dass er einen neuen Startindex (bzw. ein gewisses Startelement) festlegt und dann ab da angefangen weiter sortiert. Und alle die Elemente, die vor dem neuen Startindex/Element lagen, sollen dann sortiert hinten wieder angefügt werden...

Also es hat mich viel Hirnschmalz gekostet, aber ich kriegs gerade noch gepostet :D:

PHP:
function sort_new($array, $start) {
//temp_array festlegen
$temp_array = array();
$new_array = array();
$laenge = count($array);
	for($x=0; $x<$laenge; $x++) {
		$temp_array[$x] = $array[$x];
	}
	
	$counter=0;
	for($y=$start; $y<$laenge; $y++) {
		$new_array[$counter] = $temp_array[$y];
		$counter++;
	}
	
	//den Rest noch hinten dran hängen
	$start = $start--;
	for($z=0; $z<$start; $z++) {
		$new_array[$counter] = $temp_array[$z];
		$counter++;
	}	
	return $new_array;
}

Kurze Erklärung dazu:
Mal angenommen du hast dein Ausgangs-Array (hier mit Namen "test").
Dann rufst du die Funktion wie folgt auf:
$test = sort_new($test, meinStartindex);

Durch die Zuweisung kannst du dann auch mit deinem Ausgangsarray weiter arbeiten (das bleibt aber nun verändert! - wenn nicht gewünscht neues anlegen).
Der Startindex gibt den Index an, ab dem dann sortiert werden soll (Wichtig: auch hier wird mit dem Zählen bei "0" angefangen!)

Tja, dass war eig. auch schon alles dazu.
P.S. passiert das hier eigentlich auch anderen, das ihr euren geänderten Text in dem Antwort-Textfeld immer mit Strg-S speichern wollt?! :D :D
 

Neue Beiträge

Zurück